'use strict'
const path = require('path')
const defaultSettings = require('./src/settings.js')

function resolve(dir) {
  return path.join(__dirname, dir)
}

const name = defaultSettings.title || 'sakura--cli'  // 网页标题

const port = process.env.port || process.env.npm_config_port || 80 // 端口

module.exports = {
  // 如果你不需要生产环境的 source map，可以将其设置为 false 以加速生产环境构建。
  // source map是用于debug的打包后的文件与打包前的文件的映射
  // productionSourceMap: false,
  // 在npm run build 或 yarn build 时 ，生成文件的目录名称（要和baseUrl的生产环境路径一致）（默认dist）
  outputDir: 'dist',
  // 用于放置生成的静态资源 (js、css、img、fonts) 的；（项目打包之后，静态资源会放在这个文件夹下）
  assetsDir: 'static',
  // webpack-dev-server 相关配置 dev环境下的配置
  devServer: {
    host: '0.0.0.0', // 设置为'0.0.0.0'，同一个局域网下，可以通过ip来访问
    port: port, // 端口号
    open: true, // npm run serve时自动打开浏览器
    proxy: {
      // detail: https://cli.vuejs.org/config/#devserver-proxy
      [process.env.VUE_APP_BASE_API]: {
        target: `http://localhost:8080`,
        changeOrigin: true,
        pathRewrite: {
          ['^' + process.env.VUE_APP_BASE_API]: ''
        }
      }
    },
    disableHostCheck: true  // 关闭host检查，使其可以通过ip来访问
  },



  configureWebpack: {
    name: name,
    // 配置路径别名
    resolve: {
      alias: {
        '@': resolve('src')
      }
    }
  },

  chainWebpack: config => {

    // set svg-sprite-loader svg配置
    config.module
      .rule('svg')
      .exclude.add(resolve('src/assets/icons'))
      .end()
    config.module
      .rule('icons')
      .test(/\.svg$/)
      .include.add(resolve('src/assets/icons'))
      .end()
      .use('svg-sprite-loader')
      .loader('svg-sprite-loader')
      .options({
        symbolId: 'icon-[name]'  // 需要跟svg组件的前缀一致 `#icon-${this.iconClass}`
      })
      .end()


    // 配置使用全局scss函数等
    const oneOfsMap = config.module.rule('scss').oneOfs.store
    oneOfsMap.forEach(item => {
      item.use('sass-resources-loader')
        .loader('sass-resources-loader')
        .options({
          // 全局变量文件路径，只有一个时可将数组省去
          resources: ['./src/assets/styles/mixin.scss', './src/assets/styles/function.scss']
        })
        .end()
    })
  }
}